package com.mixin.flowable.listener;

import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 执行监听器
 *
 * 执行监听器允许在执行过程中执行Java代码。
 * 执行监听器可以捕获事件的类型：
 * 流程实例启动，结束
 * 输出流捕获
 * 获取启动，结束
 * 路由开始，结束
 * 中间事件开始，结束
 * 触发开始事件，触发结束事件
 *
 * @author Tony
 * @date 2022/12/16
 */
@Slf4j
@Component
public class YesExecutionListener implements ExecutionListener {
    /**
     * 流程设计器添加的参数
     */
    private Expression param;

    @Override
    public void notify(DelegateExecution execution) {
        log.info("Yes执行监听器:{}", execution);
        
        // 获取所有流程变量
        Map<String, Object> variables = execution.getVariables();
        log.info("所有流程变量: {}", variables);
        
        // 获取特定的流程变量
        // 假设你的流程中有一个名为"userName"的变量
        String userName = (String) execution.getVariable("userName");
        log.info("用户名: {}", userName);
        
        // 获取流程设计器中配置的param参数
        if (param != null) {
            String paramValue = (String) param.getValue(execution);
            log.info("流程设计器配置的参数: {}", paramValue);
        }
    }
}
